home *** CD-ROM | disk | FTP | other *** search
/ The PC-SIG Library 10 / The PC-Sig Library - Shareware for the IBM PC and Compatibles (PC-SIG)(Tenth Edition Disks 1-2804)(1991).iso / PC_SIGCD / 20 / 5 / DISK2058.ZIP / UNFAST.EXE / EDIT.F < prev    next >
Text File  |  1980-01-01  |  4KB  |  195 lines

  1. print bios "EDIT - By Peter Campbell, v3.0"
  2. #window memory 3000:free memory
  3. #short
  4. var tx
  5. const len=60,vect=21h*4
  6. command ? 130
  7. last_command ? 130
  8. last ? len*16
  9. mono*=5:lasttyped=0
  10. fill len*8 from last with 0d0dh
  11.  
  12. procedure insert_char(putchar)
  13.     {
  14.     moveb 128-tx from command+tx to command+1+tx
  15.     pokeb command+tx,putchar:tx++
  16.     }
  17.  
  18. dos 35(21):dosseg=reg es:dosoff=reg bx
  19. poke oldseg,dosseg:poke oldoff,dosoff
  20. poke 0|vect,set_signal:poke 0|vect+2,reg cs
  21. stop resident
  22.  
  23. set_signal:
  24. inline 9ch
  25. inline 80h,0fch,0ah
  26. inline 74h,6
  27. inline 9dh
  28. inline 0eah
  29. oldoff:
  30. data 0
  31. oldseg:
  32. data 0
  33.  
  34. begin:
  35. inline 0fbh,9dh
  36. pushall
  37.  
  38. push reg ds
  39. reg ds=reg cs
  40. offset=reg dx
  41. pop segment
  42. pos=curpos
  43.  
  44. length=segment[offset]b
  45. if length>128 then length=128
  46. tx=0:typed=0:tl=0:insert=0
  47. fill 64 from command with 2020h:changed=0
  48. prted=0
  49.  
  50. loop:
  51. curpos=pos:prt=0
  52. while prt<typed  print bios chr peek (command+prt);:prt++
  53. while prted>prt  print bios " ";:prted--
  54. prted=prt
  55.  
  56. curpos=pos+tx:cursor size 6+mono-(insert*(2+mono/2)),7+mono
  57.  
  58. wait for keypressed:test break
  59. ks=keyscan:ss=high ks:kk=low ks
  60.  
  61. if ks=11776 then
  62.     {
  63.     cursor 0,0:pos=0
  64.     if mono then screen 3 else screen 7
  65.     }
  66.  
  67. if ks=11520 then
  68.     {
  69.     poke 0|vect,dosoff:poke 0|vect+2,dosseg
  70.     deallocate reg cs:if error then print bios "Memory error!":beep
  71.     goto endcommand
  72.     }
  73.  
  74. #long
  75. if ks=15616 then
  76.     {
  77.     #short
  78.     while (tl<lasttyped) and (tx<length)
  79.     {
  80.     kk=peek (last_command+tl)
  81.     if insert then
  82.         {
  83.         if typed<length then insert_char(kk):typed++ else beep
  84.         }
  85.     else
  86.         {
  87.         pokeb command+tx,kk:tx++
  88.         if tx>typed then typed=tx
  89.         }
  90.     tl++:if tl>127 then tl=127
  91.     }
  92.     goto loop
  93.     #long
  94.     }
  95. #short
  96.  
  97. if ks=18176 then tx=0:tl=0
  98. if ks=20224 then tx=typed:tl=typed
  99. if ks=19200 then if tx then tx--:tl--
  100. if ks=19712 then if tx<length then tx++:tl++
  101. if ks=21248 then
  102.     {
  103.     if tx<typed then typed--
  104.     if tl<127 then tl++
  105.     moveb 128-tx from command+tx+1 to command+tx
  106.     changed=1
  107.     }
  108. if (ks=29952) or (ks=16384) then
  109.     {
  110.     if tx<typed then typed=tx
  111.     changed=1
  112.     goto loop
  113.     }
  114. if ks=15104 then kk=peekb (last_command+tl)
  115. if ks=20992 then insert=not insert
  116. if kk=13 then goto endcommand
  117. if (kk=27) or (ks=16128) then typed=0:tx=0:tl=0:goto loop
  118. if ks=3592 then
  119.     {
  120.     if tx then
  121.     {
  122.     moveb 128-tx from command+tx to command-1+tx
  123.     tx--:tl--
  124.     if typed then typed--
  125.     changed=1
  126.     }
  127.     goto loop
  128.     }
  129. if (ss=72) or (ss=80) then gosub select_old:goto loop
  130. if kk=0 then goto loop
  131.  
  132. if typed<(length-1) then
  133.     {
  134.     changed=1
  135.     if not insert then
  136.     {
  137.     tl++
  138.     pokeb command+tx,kk
  139.     tx++
  140.     if tx>typed then typed=tx
  141.     }
  142.     else
  143.     {
  144.     if ks=15104 then tl++
  145.     insert_char(kk)
  146.     typed++
  147.     }
  148.     }
  149. goto loop
  150.  
  151. endcommand:
  152. pokeb command+typed,13
  153. moveb typed+1 from command to segment|offset+2
  154. segment[offset+1]b=typed
  155. if (typed>1) and changed then
  156.     {
  157.     moveb len*15 from last+len to last
  158.     moveb len from command to last+15*len
  159.     pokeb last+16*len-1,13
  160.     }
  161. lasttyped=typed
  162. fill 64 from last_command with 2020h
  163. moveb typed from command to last_command
  164.  
  165. popall:iret
  166.  
  167. select_old:
  168. pokeb oldkeys+1,0
  169. open window oldkeys
  170. start=last
  171. for a=0 to 15
  172.     locate a+6,17
  173.     p=start:start+=len
  174.     while peekb p<>13 print chr peek p;:p++
  175. next a
  176.  
  177. pokeb oldkeys+1,16
  178. x=select oldkeys,16
  179. close window
  180. if x=0 then return
  181. changed=0
  182. des=last+(x-1)*len
  183. for a=0 to 59
  184.     pokeb command+a,peek(des+a):typed=a
  185.     if peekb (des+a)=13 then goto fin_select
  186. next a
  187. fin_select:
  188. tx=typed:tl=typed
  189. return
  190.  
  191. oldkeys:
  192. datab 2,16,15,3,79,22,1110b
  193. datab 22,23,1,'Select a command -'
  194. datab 26
  195.